/**
 * url： https://101.zoo.team/zi-fu-chuan/zi-fu-chuan-part-1-fan-zhuan-zheng-shu-you-xiao-de-zi-mu-yi-wei-ci-he-fan-zhuan-zheng-shu#you-xiao-de-zi-mu-yi-wei-ci
 * 
 * 给定两个字符串 s 和 t ，编写一个函数还判断 t 是否是 s 的字母异位词
 * 
 * 示例1
 * 输入：s = "anagram", t = "nagaram"
 * 输出：true
 * 
 * 示例2
 * 输入：s = "rat", t = "car"
 * 输出：false
 * 
 */

/**
 * 利用数组sort
 * 将字符串转化为数组，使用sort进行排序，然后比较两个字符串是否相等
 */

const isAnagram1 = (s, t) => {
    // 
    if (s.length !== t.length) {
        return false
    }
    
    // 将字符串转化为数组
    let sArr = s.split('');
    let tArr = t.split('');
    
    // sort排序规则
    const sortFun = (a, b) => {
        return a.charCodeAt() - b.charCodeAt()
    }
    
    // 排序
    sArr.sort(sortFun);
    tArr.sort(sortFun);
    
    return sArr.join("") === tArr.join("")
}


/**
 * 计数累计法
 * 
 * 声明一个对象记录字符串每个字母的个数，另外一个字符串每项与得到的对象做匹配，最后，根据计数判断是否相等。
 * 
 */

const isAnagram2 = (s, t) => {
    if (s.length !== t.length) {
        return false
    }
    
    const hash = {}
    
    // 遍历循环 s，添加hash 
    for (const k of s) {
        hash[k] = (++hash[k]) || 0
    }
    
    // 遍历循环 t
    for (const k of t) {
        if (!hash[k]) {
            return false
        }
        hash[k]--;
    }
    
    return true
    
}


